//
// * Copyright (c) 2002-2009 "Neo Technology,"
// *     Network Engine for Objects in Lund AB [http://neotechnology.com]
// *
// * This file is part of Neo4j.
// * 
// * Neo4j is free software: you can redistribute it and/or modify
// * it under the terms of the GNU Affero General Public License as
// * published by the Free Software Foundation, either version 3 of the
// * License, or (at your option) any later version.
// * 
// * This program is distributed in the hope that it will be useful,
// * but WITHOUT ANY WARRANTY; without even the implied warranty of
// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// * GNU Affero General Public License for more details.
// * 
// * You should have received a copy of the GNU Affero General Public License
// * along with this program. If not, see <http://www.gnu.org/licenses/>.
// 
namespace org.neo4j.kernel.impl.nioneo.store
{


	using AbstractDynamicStore = org.neo4j.kernel.impl.nioneo.store.AbstractDynamicStore;

///
/// <summary> * Dynamic store that stores strings. </summary>
/// 
	public class DynamicStringStore : AbstractDynamicStore
	{
	// store version, each store ends with this string (byte encoded)
		private const string VERSION = "StringPropertyStore v0.9.5";

		public DynamicStringStore<T1>(string fileName, Map<T1> config) : base(fileName, config)
		{
		}

		public DynamicStringStore(string fileName) : base(fileName)
		{
		}

		public virtual string getTypeAndVersionDescriptor()
		{
			return VERSION;
		}

		public static void createStore(string fileName, int blockSize)
		{
			createEmptyStore(fileName, blockSize, VERSION);
		}

		public virtual void setHighId(long highId)
		{
			base.setHighId(highId);
		}

		public override int nextBlockId()
		{
			return base.nextBlockId();
		}

		protected internal override bool versionFound(string version)
		{
			if (!version.StartsWith("StringPropertyStore"))
			{
			// non clean shutdown, need to do recover with right neo
				return false;
			}
			if (version.Equals("StringPropertyStore v0.9.3"))
			{
				rebuildIdGenerator();
				closeIdGenerator();
				return true;
			}
			throw new IllegalStoreVersionException("Store version [" + version + "]. Please make sure you are not running old Neo4j kernel " + " towards a store that has been created by newer version " + " of Neo4j.");
		}
	}
}